﻿<!DOCTYPE html>
<html lang="zh-cmn-Hans">
<head>
	<meta charset="utf-8" />
	<meta http-equiv="X-UA-Compatible" content="IE=edge" />
	<title>FreeScheduler</title>
	<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport" />
	<link href="./htm/bootstrap/css/bootstrap.min.css" rel="stylesheet" />
	<link href="./htm/plugins/font-awesome/css/font-awesome.min.css" rel="stylesheet" />
	<link href="./htm/css/skins/_all-skins.css" rel="stylesheet" />
	<link href="./htm/plugins/pace/pace.min.css" rel="stylesheet" />
	<link href="./htm/plugins/datepicker/datepicker3.css" rel="stylesheet" />
	<link href="./htm/plugins/timepicker/bootstrap-timepicker.min.css" rel="stylesheet" />
	<link href="./htm/plugins/select2/select2.min.css" rel="stylesheet" />
	<link href="./htm/plugins/treetable/css/jquery.treetable.css" rel="stylesheet" />
	<link href="./htm/plugins/treetable/css/jquery.treetable.theme.default.css" rel="stylesheet" />
	<link href="./htm/plugins/multiple-select/multiple-select.css" rel="stylesheet" />
	<link href="./htm/css/system.css" rel="stylesheet" />
	<link href="./htm/css/index.css" rel="stylesheet" />
	<script type="text/javascript" src="./htm/js/jQuery-2.1.4.min.js"></script>
	<script type="text/javascript" src="./htm/bootstrap/js/bootstrap.min.js"></script>
	<script type="text/javascript" src="./htm/plugins/pace/pace.min.js"></script>
	<script type="text/javascript" src="./htm/plugins/datepicker/bootstrap-datepicker.js"></script>
	<script type="text/javascript" src="./htm/plugins/timepicker/bootstrap-timepicker.min.js"></script>
	<script type="text/javascript" src="./htm/plugins/select2/select2.full.min.js"></script>
	<script type="text/javascript" src="./htm/plugins/input-mask/jquery.inputmask.js"></script>
	<script type="text/javascript" src="./htm/plugins/input-mask/jquery.inputmask.date.extensions.js"></script>
	<script type="text/javascript" src="./htm/plugins/input-mask/jquery.inputmask.extensions.js"></script>
	<script type="text/javascript" src="./htm/plugins/treetable/jquery.treetable.js"></script>
	<script type="text/javascript" src="./htm/plugins/multiple-select/multiple-select.js"></script>
	<script type="text/javascript" src="./htm/js/lib.js"></script>
	<script type="text/javascript" src="./htm/js/bmw.js"></script>
	<!--[if lt IE 9]>
	<script type='text/javascript' src='./htm/plugins/html5shiv/html5shiv.min.js'></script>
	<script type='text/javascript' src='./htm/plugins/respond/respond.min.js'></script>
	<![endif]-->
</head>
<body class="hold-transition skin-blue sidebar-mini">
	<div class="wrapper">
		<!-- Main Header-->
		<header class="main-header">
			<!-- Logo--><a href="./" class="logo">
				<!-- mini logo for sidebar mini 50x50 pixels--><span class="logo-mini"><b>Free</b></span>
				<!-- logo for regular state and mobile devices--><span class="logo-lg"><b>FreeScheduler</b></span>
			</a>
			<!-- Header Navbar-->
			<nav role="navigation" class="navbar navbar-static-top">
				<!-- Sidebar toggle button--><a href="#" data-toggle="offcanvas" role="button" class="sidebar-toggle"><span class="sr-only">Toggle navigation</span></a>
				<!-- Navbar Right Menu-->
				<div class="navbar-custom-menu">
				</div>
			</nav>
		</header>
		<!-- Left side column. contains the logo and sidebar-->
		<aside class="main-sidebar">
			<!-- sidebar: style can be found in sidebar.less-->
			<section class="sidebar">
				<!-- Sidebar Menu-->
				<ul class="sidebar-menu">
					<!-- Optionally, you can add icons to the links-->

					<li class="treeview active">
						<a href="#"><i class="fa fa-laptop"></i><span>通用管理</span><i class="fa fa-angle-left pull-right"></i></a>
						<ul class="treeview-menu">
							<li><a href="/FreeScheduler/TaskInfo/"><i class="fa fa-sort-amount-desc"></i>任务列表</a></li>
							<li><a href="/FreeScheduler/TaskLog/"><i class="fa fa-headphones"></i>任务日志</a></li>
						</ul>
					</li>

					<li class="treeview active">
						<a href="#"><i class="fa fa-laptop"></i><span>开发文档</span><i class="fa fa-angle-left pull-right"></i></a>
						<ul class="treeview-menu">
							<li><a href="https://freesql.net/guide/freescheduler.html" target="_blank"><i class="fa fa-circle-o"></i>FreeScheduler</a></li>
							<li><a href="https://freesql.net/" target="_blank"><i class="fa fa-circle-o"></i>FreeSql</a></li>
							<li><a href="https://freesql.net/guide/freeredis.html" target="_blank"><i class="fa fa-circle-o"></i>FreeRedis</a></li>
							<li><a href="https://freesql.net/guide/freeim.html" target="_blank"><i class="fa fa-circle-o"></i>FreeIM</a></li>
						</ul>
					</li>
				</ul>
				<!-- /.sidebar-menu-->
			</section>
			<!-- /.sidebar-->
		</aside>
		<!-- Content Wrapper. Contains page content-->
		<div class="content-wrapper">
			<!-- Main content-->
			<section id="right_content" class="content">
				<div style="display:none;">
					<!-- Your Page Content Here-->
					Loading...
				</div>
			</section>
			<!-- /.content-->
		</div>
		<!-- /.content-wrapper-->
	</div>
	<!-- ./wrapper-->
	<script type="text/javascript" src="./htm/js/system.js"></script>
	<script type="text/javascript" src="./htm/js/admin.js?v=1"></script>
	<script type="text/javascript">
		if (!location.hash) $('#right_content div:first').show();
		// 路由功能
		//针对上面的html初始化路由列表
		function hash_encode(str) { return url_encode(base64.encode(str)).replace(/%/g, '_'); }
		function hash_decode(str) { return base64.decode(url_decode(str.replace(/_/g, '%'))); }
		window.div_left_router = {};
		$('li.treeview.active ul li a').each(function (index, ele) {
			if (ele.target == '_blank') return;
			var href = $(ele).attr('href');
			$(ele).attr('href', '#base64url' + hash_encode(href));
			window.div_left_router[href] = $(ele).text();
        });
        if (!location.hash) $('li.treeview.active ul li a')[0].click();
		(function () {
			function Vipspa() {
			}
			Vipspa.prototype.start = function (config) {
				Vipspa.mainView = $(config.view);
				startRouter();
				window.onhashchange = function () {
					if (location._is_changed) return location._is_changed = false;
					startRouter();
				};
			};
			function startRouter() {
				var hash = location.hash;
				if (hash === '') return //location.hash = $('li.treeview.active ul li a:first').attr('href');//'#base64url' + hash_encode('/resume_type/');
				if (hash.indexOf('#base64url') !== 0) return;
				var act = hash_decode(hash.substr(10, hash.length - 10));
				//加载或者提交form后，显示内容
				function ajax_success(refererUrl) {
					if (refererUrl == location.pathname) { startRouter(); return function(){}; }
					var hash = '#base64url' + hash_encode(refererUrl);
					if (location.hash != hash) {
						location._is_changed = true;
						location.hash = hash;
					}'\''
					return function (data, status, xhr) {
						var div;
						Function.prototype.ajax = $.ajax;
						top.mainViewNav = {
							url: refererUrl,
							trans: function (url) {
								var act = url;
								act = act.substr(0, 1) === '/' || act.indexOf('://') !== -1 || act.indexOf('data:') === 0 ? act : join_url(refererUrl, act);
								return act;
							},
							goto: function (url_or_form, target) {
								var form = url_or_form;
								if (typeof form === 'string') {
									var act = this.trans(form);
									if (String(target).toLowerCase() === '_blank') return window.open(act);
									location.hash = '#base64url' + hash_encode(act);
								}
								else {
									if (!window.ajax_form_iframe_max) window.ajax_form_iframe_max = 1;
									window.ajax_form_iframe_max++;
									var iframe = $('<iframe name="ajax_form_iframe{0}"></iframe>'.format(window.ajax_form_iframe_max));
									Vipspa.mainView.append(iframe);
									var act = $(form).attr('action') || '';
									act = act.substr(0, 1) === '/' || act.indexOf('://') !== -1 ? act : join_url(refererUrl, act);
									if ($(form).find(':file[name]').length > 0) $(form).attr('enctype', 'multipart/form-data');
									$(form).attr('action', act);
									$(form).attr('target', iframe.attr('name'));
									iframe.on('load', function () {
										var doc = this.contentWindow ? this.contentWindow.document : this.document;
										if (doc.body.innerHTML.length === 0) return;
										if (doc.body.innerHTML.indexOf('Error:') === 0) return alert(doc.body.innerHTML.substr(6));
										//以下 '<script ' + '是防止与本页面相匹配，不要删除
										if (doc.body.innerHTML.indexOf('<script ' + 'type="text/javascript">location.href="') === -1) {
											ajax_success(doc.location.pathname + doc.location.search)(doc.body.innerHTML, 200, null);
										}
									});
								}
							},
							reload: startRouter,
							query: qs_parseByUrl(refererUrl)
						};
						top.mainViewInit = function () {
							if (!div) return setTimeout(top.mainViewInit, 10);
							admin_init(function (selector) {
								if (/<[^>]+>/.test(selector)) return $(selector);
								return div.find(selector);
							}, top.mainViewNav);
						};
						if (/<body[^>]*>/i.test(data))
							data = data.match(/<body[^>]*>(([^<]|<(?!\/body>))*)<\/body>/i)[1];
						div = Vipspa.mainView.html(data);
					};
				};
				$.ajax({
					type: 'GET',
					url: act,
					dataType: 'html',
					success: ajax_success(act),
					error: function (jqXHR, textStatus, errorThrown) {
						var data = jqXHR.responseText;
						if (/<body[^>]*>/i.test(data))
							data = data.match(/<body[^>]*>(([^<]|<(?!\/body>))*)<\/body>/i)[1];
						Vipspa.mainView.html(data);
					}
				});
			}
			window.vipspa = new Vipspa();
		})();
		$(function () {
			vipspa.start({
				view: '#right_content',
			});
		});
		// 页面加载进度条
		$(document).ajaxStart(function() { Pace.restart(); });
	</script>
</body>
</html>